// #pragma once
// // #include "libnml/posemath/posemath.h"
// // #include "libnml/posemath/posemath.h"
// #define ZUCMOT_MAX_JOINTS 9
// #define ZUCMOT_MAX_AXIS 9  //ZUCMOT_MAX_JOINTS和ZUCMOT_MAX_AXIS数值保持一致,因多处两者的使用相混

// #define ZUC_MOTION_TYPE_TRAVERSE 1
// #define TP_POS_EPSILON 1e-5
// #define TP_MIN_ARC_ANGLE 1e-3

// #define T_PLANNER 0
// #define S_PLANNER 1
// #define TOPP_PLANNER 2

// #define ZUC_MOTION_TYPE_JOINT_LINE 7
// #define ZUCMOT_MAX_DIO 208             // 16 + 128 + 64

// struct Blend_cond_tol
// {
//     int cond;
//     double tolerance;
// };

// #define ZERO_ZUC_POSE(pos) \
// do {                   \
//     pos.tran.x = 0.0;  \
//     pos.tran.y = 0.0;  \
//     pos.tran.z = 0.0;  \
//     pos.a = 0.0;       \
//     pos.b = 0.0;       \
//     pos.c = 0.0;       \
//     pos.u = 0.0;       \
//     pos.v = 0.0;       \
//     pos.w = 0.0;       \
// } while (0)


// typedef struct FtConfig
// {
//     unsigned char enableFt;
//     unsigned char enableNTrack;
//     float ftUser;
//     float ftReboundFK;
//     float ftConstant;
// } FtConfig;


// typedef struct CollisionOption
// {
//     int collisionMethod;
//     int reactionType;
//     float reboundAngle;
//     float reboundLength;
//     float rebound_j_acc;
//     float rebound_j_vel;
//     float rebound_l_acc;
//     float rebound_l_vel;
// } CollisionOption;

// typedef struct EndForceCond
// {
//     unsigned char enableEndCond;
//     int lowFlag;
//     int upFlag;
//     double lowLimitForce;
//     double upLimitForce;
// } EndForceCond;

// typedef struct EndCond
// {
//     int di_type;
//     int di_index;
//     short di_stat;
// } EndCond;

// typedef struct
// {
//     int tc_id;
//     int finish_fw;
//     int finish_pause_rset;
//     double pathq_coefs[6][4];
//     // double pathvel_coefs[6][3];//路径一阶导系数
//     // double pathacc_coefs[6][2];//路径二阶导系数
//     double ss;
//     double ss_seg_start;  // the segment s tart point
//     double min_time;

//     // double pathq_coefs_next[6][4];
//     // double pathvel_coefs_next[6][3];//路径一阶导系数
//     // double pathacc_coefs_next[6][2];//路径二阶导系数
//     // double ss_next;// next指的是“后-->前”方向的next
//     // double ss_seg_start_next;// the segment start point

//     // double jointpos[6];
//     // double min_time;// by req_vel
//     // double x_by_reqvel;
//     // double reqvel[2];// reqvel[0]->cart(0) or joint vel(1); reqvel[1]->vel value

//     double jtor_a[2 *
//                   ZUCMOT_MAX_JOINTS];  // torque constraints: 12 = 2 * dof, interpolation discretization scheme considers the current and next gridpoints;
//     double jtor_b[2 * ZUCMOT_MAX_JOINTS];
//     double jtor_c[2 * ZUCMOT_MAX_JOINTS];
//     double jtor_d[2 * ZUCMOT_MAX_JOINTS];

//     // double jacc_a[12];  // joint acc constraints: 12 = 2 * dof, interpolation discretization scheme considers the current and next gridpoints;
//     // double jacc_b[12];

//     double xbound[2];       // joint vel constraints: xbound[0]: min; xbound[1]: max
//     double control_set[2];  //[0]:lower; [1]:upper
//     double optimal_u;       // optimal path acceleration
//     double reachable_set;

//     int constraints_num;
//     int constraints_tor_num;
//     int constraints_acc_num;
//     // double b_28[28];
//     // double A_56[56];

//     // double b_52[52];
//     // double A_104[104];
//     double b[28];
//     double A[56];

//     double ave_path_vel;  // between i and i - 1
//     double grid_time;     // between i and i - 1
//     double total_time;    // 运动至该网格点所用的总时间，用于计算关节位置

// } TcPathInfo;  //每段路径拟合函数对应系数(六个关节)

// typedef struct ConstraintsToppra
// {
//     double vel_lim[6][2];
//     double acc_lim[6][2];
//     double tor_lim[6][2];
//     double req_vel[2];  //关节空间或笛卡尔空间的最大指令速度,暂时先放这个结构体中; req_vel[0] = 0: movj; req_vel[0] = 1: movl; req_vel[1]: 指令速度
//     int lim_add[3];   //1th: 1:add vel limit; 2th: 1:add acc limit  ---->  changed as filter size; 3th: 1:add tor limit
// } ConstraintsToppra;  //给定的关节约束(最大/小关节速度、最大/小关节加速度、最大/小关节力矩)


// typedef struct ClsnStopAcc
// {
//     double pos_clsn_acc;  //以位置为规划主轴时碰撞检测后的停止加速度
//     double ori_clsn_acc;  //以姿态为规划主轴时碰撞检测后的停止加速度
//     double jacc[ZUCMOT_MAX_JOINTS];
// } ClsnStopAcc;

// typedef struct
// {
//     TcPathInfo* path_infom; /* ptr to the tcs */
//     int size;               /* size of queue */
//     int _len;               /* number of tcs now in queue */
//     int front, rear;        /* indices to next to get, next to put */
// } PathInfoQueue;

// typedef enum
// {
//     IODevTYPE_PHYSIC = 0,
//     IODevTYPE_TIO = 1,
//     IODevTYPE_EXTIO = 2,
//     IODevTYPE_CAB_INTERNAL = 3,
//     IODevTYPE_SYNCH_MB_SLAVE = 4,
//     IODevTYPE_SYNCH_PN_DEV = 5,
//     IODevTYPE_SYNCH_EIP_ADPT = 6
// } IODevType;

// //假


// typedef enum
// {
//     RTAPI_MSG_NONE = 0,
//     RTAPI_MSG_ERR,
//     RTAPI_MSG_WARN,
//     RTAPI_MSG_INFO,
//     RTAPI_MSG_DBG,
//     RTAPI_MSG_ALL
// } msg_level_t;

// //IO
// #define ZUCMOT_MAX_DIO 208             // 16 + 128 + 64
// #define ZUCMOT_MAX_AIO 136             // 120 + 32 + 32
// #define MAX_EXTIO_DI_NUM 64
// #define MAX_EXTIO_DO_NUM 64
// #define MAX_EXTIO_AI_NUM 32
// #define MAX_EXTIO_AO_NUM 32
// #define ZUCMOT_UINT16_AIO_NUM 16
// #define ZUCMOT_PNDev_INT_AIO_NUM 32
// #define ZUCMOT_PNDev_FLOAT_AIO_NUM 32
// #define ZUCMOT_INT16_AIO_NUM 16

// #define ZUCMOT_MAX_MODBUS_DIO 128
// #define ZUCMOT_MAX_PNDev_DIO 64

// #define ZUCMOT_FLOAT32_AIO_NUM 32
// #define ZUCMOT_MAX_MODBUS_AIO_NUM (ZUCMOT_FLOAT32_AIO_NUM + ZUCMOT_UINT16_AIO_NUM + ZUCMOT_INT16_AIO_NUM)  // modbus aio number
// #define ZUCMOT_MAX_PNDev_AIO_NUM (ZUCMOT_PNDev_INT_AIO_NUM + ZUCMOT_PNDev_FLOAT_AIO_NUM)